import numpy as np
import pandas as pd
import seaborn as sns
from matplotlib import pyplot as plt
from matplotlib.font_manager import FontProperties


def draw_scatter_plot():
  # 生成 1000 个随机数 散点图
  N = 1000
  x = np.random.randn(N)
  y = np.random.randn(N)
  # 用 Matplotlib 画散点图
  plt.scatter(x, y, marker='o')  # marker可选x/o/>表示散点的形状
  plt.show()

def seaborn_scatter_plot():
  # 数据准备
  N = 1000
  x = np.random.randn(N)
  y = np.random.randn(N)
  # 用 Seaborn 画散点图
  df = pd.DataFrame({'x': x, 'y': y})
  sns.jointplot(x="x", y="y", data=df, kind='scatter')
  plt.show()

def line_plot():
  # 绘制折线图
  x = [2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019]
  y = [5, 3, 6, 20, 17, 16, 19, 30, 32, 35]
  # 使用 Matplotlib 画折线图
  plt.plot(x, y)
  plt.show()
  # 使用 Seaborn 画折线图
  df = pd.DataFrame({'x': x, 'y': y})
  sns.lineplot(x="x", y="y", data=df)
  plt.show()

def dist_plot():
  # 数据准备
  a = np.random.randn(100)
  s = pd.Series(a)
  # 用 Matplotlib 画直方图
  plt.hist(s)
  plt.show()
  # 用 Seaborn 画直方图
  sns.distplot(s, kde=False)
  plt.show()
  sns.distplot(s, kde=True)
  plt.show()

def box_plot():
  # 数据准备
  # 生成 0-1 之间的 10*4 维度数据
  data = np.random.normal(size=(10, 4))
  lables = ['A', 'B', 'C', 'D']
  # 用 Matplotlib 画箱线图
  plt.boxplot(data, labels=lables)
  plt.show()
  # 用 Seaborn 画箱线图
  df = pd.DataFrame(data, columns=lables)
  sns.boxplot(data=df)
  plt.show()

def pie_plot():
  # 数据准备
  nums = [25, 37, 33, 37, 6]
  labels = ['High-school', 'Bachelor', 'Master', 'Ph.d', 'Others']
  # 用 Matplotlib 画饼图
  plt.pie(x=nums, labels=labels)
  plt.show()

def hot_map():
  if __name__ == '__main__':
    # 数据准备
    flights = sns.load_dataset("flights")
    data = flights.pivot('year', 'month', 'passengers')
    # 用 Seaborn 画热力图
    sns.heatmap(data)
    plt.show()

def spider_plot():
  # 数据准备
  labels = np.array(
      [u" learn ", "code", u" project ", u" talk ", u" x ", u" y "])
  stats = [83, 61, 95, 67, 76, 88]
  # 画图数据准备，角度、状态值
  angles = np.linspace(0, 2 * np.pi, len(labels), endpoint=False)
  stats = np.concatenate((stats, [stats[0]]))
  angles = np.concatenate((angles, [angles[0]]))
  # 用 Matplotlib 画蜘蛛图
  fig = plt.figure()
  ax = fig.add_subplot(111, polar=True)
  ax.plot(angles, stats, 'o-', linewidth=2)
  ax.fill(angles, stats, alpha=0.25)
  # 设置中文字体
  # font = FontProperties(fname=r"C:\Windows\Fonts\simhei.ttf", size=14)
  font = FontProperties(fname="/System/Library/Fonts/STHeiti Medium.ttc",
                        size=14)
  # 只使用原始标签数量的角度，避免标签和刻度数量不匹配
  ax.set_thetagrids(angles[:-1] * 180 / np.pi, labels, fontproperties=font)
  plt.show()


if __name__ == '__main__':
  spider_plot()